package com.rustic.server.web;

import lombok.Data;

/**
 * 存放管理后台web的上下文信息，主要是API接口的公共参数
 *
 * @author tanghuang 2020年02月25日
 */
public class WebContext {

    private WebContext() {
        throw new IllegalStateException("Utility class");
    }

    private static final ThreadLocal<PublicParameter> PUBLIC_PARAMETER_HOLDER = ThreadLocal.withInitial(PublicParameter::new);

    /**
     * 获得公共参数
     */
    public static PublicParameter getPublicParameter() {
        return PUBLIC_PARAMETER_HOLDER.get();
    }

    /**
     * 清除
     */
    public static void clear() {
        PUBLIC_PARAMETER_HOLDER.remove();
    }

    /**
     * 用户IP
     */
    public static String getIp() {
        PublicParameter p = PUBLIC_PARAMETER_HOLDER.get();
        return p.getIp();
    }

    /**
     * token
     */
    public static String getToken() {
        PublicParameter p = PUBLIC_PARAMETER_HOLDER.get();
        return p.getToken();
    }

    /**
     * 用户id
     */
    public static int getUserId() {
        PublicParameter p = PUBLIC_PARAMETER_HOLDER.get();
        return p.getUserId();
    }

    /**
     * 公共参数列表
     */
    @Data
    public static class PublicParameter {

        /**
         * 访问token, 系统颁发，登录后必须传入，所有用户信息将只能通过token换取
         */
        private String token;

        /**
         * 用户IP
         */
        private String ip;

        /**
         * 用户id
         */
        private int userId;

    }
}
